package leetcode;

/*
345. 反转字符串中的元音字母
编写一个函数，以字符串作为输入，反转该字符串中的元音字母。
示例 1：
输入："hello"
输出："holle"
示例 2：
输入："leetcode"
输出："leotcede"
提示：
元音字母不包含字母 "y" 。
*/

import java.util.Arrays;
import java.util.List;

public class problems_345 {
    public static void main(String[] args) {
        new Solution().reverseVowels("hello");
        System.out.println();
    }

    static class Solution {
        final List<Character> listChar = Arrays.asList(new Character[]{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'});

        public String reverseVowels(String s) {
            if (null == s || s.isEmpty()) return s;
            char[] chars = s.toCharArray();
            int left = findIndex(chars, 0, true);
            int right = findIndex(chars, s.length() - 1, false);
            while (left < right) {
                char temp = chars[left];
                chars[left] = chars[right];
                chars[right] = temp;
                // 索引移动
                left = findIndex(chars, left + 1, true);
                right = findIndex(chars, right - 1, false);
            }
            return new String(chars);
        }

        //
        private int findIndex(char[] chars, int index, boolean add) {
            while (add ? index < chars.length : index >= 0) {
                if (listChar.contains(chars[index])) return index;
                if (add) {
                    index++;
                } else {
                    index--;
                }
            }
            return add ? chars.length - 1 : 0;
        }
    }
}